/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	ClockCmpst.java
 * 模块说明：	
 * 修改历史：
 * Dec 18, 2007 - lxm - 创建。
 */
package com.hd123.rumba.gwt.entry.client;

import java.util.Date;

import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;

/**
 * 时钟 | 界面部件
 * 
 * @author lxm
 * 
 */
class ClockCmpst extends Composite {

  /**
   * 构造函数
   * 
   * @param entryPoint
   *          指定所属模块入口点。
   */
  public ClockCmpst(MainFrame entryPoint) {
    super();
    assert entryPoint != null;
    drawSelf();
  }

  // --------------------------------------------------------------------------
  // 数据
  // --------------------------------------------------------------------------

  // --------------------------------------------------------------------------
  // 用户界面
  // --------------------------------------------------------------------------

  private HorizontalPanel pnl;
  private Label lblClock;
  
  private Timer timer = new Timer() {
    public void run() {
      refresh();
    }
  };

  private void drawSelf() {
    pnl = new HorizontalPanel();
    pnl.setSpacing(0);
    pnl.setHeight("100%");

    Label lbl = new Label();
    pnl.add(lbl);
    lbl.setStyleName("rb-clock-left");

    lblClock = new Label();
    pnl.add(lblClock);
    pnl.setCellVerticalAlignment(lblClock, HorizontalPanel.ALIGN_MIDDLE);
    lblClock.setStyleName("rb-clock");
    lblClock.setWordWrap(false);
    this.refresh();

    this.initWidget(pnl);
    
    timer.scheduleRepeating(1000);
  }
  
  private final static DateTimeFormat displayFmt = DateTimeFormat.getFormat("HH:mm");
  private final static DateTimeFormat hintFmt = DateTimeFormat.getFormat("yyyy年M月d日(EEEEE)");
  
  private void refresh() {
    Date date = new Date();
    
    String displayStr = displayFmt.format(date);
    if (!displayStr.equals(lblClock.getText()))
      lblClock.setText(displayStr);
    
    String hintStr = hintFmt.format(date);
    String oldHintStr = DOM.getElementAttribute(lblClock.getElement(), "title");
    if (!hintStr.equals(oldHintStr))
      DOM.setElementAttribute(lblClock.getElement(), "title", hintStr);
  }

}
